#include <iostream>
#include <fstream>

#include "ReceptorDelta.h"
#include "EmisorDelta.h"
//https://en.wikipedia.org/wiki/Rsync

#include "DatosTrasmitidos.h"
using namespace std;

void TestHash()
{
    MD5 md5("zzzz\n");
    //http://www.zedwood.com/article/121/cpp-md5-function
    cout << md5.hexdigest()<< endl;
    //https://en.wikipedia.org/wiki/Adler-32
   // ADLER32 ad32("Wikipedia");
    //cout << ad32.hexdigest()<< endl;

}

int main(int argc, char* argv[])
{
    //TestHash();

    //***********************
    EmisorDelta EM;
    EM.Iniciar("b");//si fuese en 2 pcs distintas, tendrian el mismo nombre
    //***********************

    //**********************
    ReceptorDelta RD;
    RD.Iniciar("a");
    //RECEPTOR divide el archivo en partes fijas no solapadas
    // y les calcula el MDH y el rolling checksum
    RD.CalcularHashesVarios();
    //***********************
    std::string recSer = RD.Serializar();
    //se manda recSer a traves de la red !!!!
    //***********************

    //hidrato lo enviado por la red
    DatosTrasmitidos<PaqueteHashReceptor> HpR(recSer);
    //EMISOR calcula los rolling checksum del file en comun
    EM.CalcularHashesVarios();
    //hago la comparacion
    DatosTrasmitidos<Diferencial> DatTdif = EM.compararConHashesDelReceptor(HpR);
    //**************************************
    std::string DifSer = DatTdif.Serializar();
    //se manda DatTdif a traves de la red !!!!
    //**************************************

    DatosTrasmitidos<Diferencial> DatTdif_rec(DifSer);

    RD.UpdatearArchivoRespectoAemisor( DatTdif_rec );

    return 0;
}
